#include <iostream>
#include <string>

using namespace std;

// 提前声明 函数 和 类  类外实现友元的方法
template<typename T>
class My_class;

template<typename T>
void func_2(My_class<T> & s);

template<typename T>
class My_class
{
private:
    T val;
public:
    My_class(T val):val(val){};

    // 友元函数 类内实现
    friend void func_1(My_class<T> & s)
    {
        cout << "类内实现友元函数" << s.val << endl;
    }

    // 友元函数 类外实现  注意 需要添加 空模板 <>
    friend void func_2<>(My_class<T> & s);
};

template<typename T>
void func_2(My_class<T> & s)
{
    cout << "类外实现友元函数" << s.val << endl;
}

int main(int argc, char const *argv[])
{
    My_class<string> s("刘欢");

    func_2(s);
    
    return 0;
}
